<?php
/**
 * Проверка допустимых символов, символы задаються также 
 * как и для метода preg_match
 * @author nrnwest@gmail.com
 *
 */
class Arm_Validate_AllowChar extends Zend_Validate_Abstract
{
    const NOT_CHAR = 'notChar';
    
    /**
     * Сообщения
     * 
     * @var array
     */
    protected $_messageTemplates = array(
        self::NOT_CHAR => "Не допустимые символы, допустимые %allowChar%" 
    );
    
    /**
     * @var array
     */
    protected $_messageVariables = array(
        'allowChar' => '_allowCharView'
    );
    
    /**
     * Допустимые символы
     * @var string $_allowChar
     */
    protected $_allowChar = '';
    
    /**
     * При ошибке эти символы будут выведенны в сообщении пользвоателю
     * @var string $_allowCharView
     */
    protected $_allowCharView = '';
    
    /**
     * 
     * @param string $allowChar пример a-z\_
     */
    public function __construct($allowChar)
    {
        $this->_allowChar = $allowChar;
        $this->_allowCharView = str_replace('\\', '', $this->_allowChar);
    }
    
    
    /**
     * Проверка допустимых символов
     * @param string $value
     */
    public function isValid($value)
    {
        $value = trim($value);
        @ $res   = preg_match('~[^'.$this->_allowChar.']+~iu', $value);
        if($res === false) {
            throw new Arm_Exception(Arm_Translate::_('Не допустимые символы, слешируйте их, как для метода preg_match'));
        }
        if($res !== 0) {
            $this->_error(self::NOT_CHAR);
            return false;
        }
        return true;
    }
    
}